//
// Created by 颖滴哦 on 2023/3/17.
//
/*
 * 1.使用fork和exec在每一行输入中调用该命令。在父级中使用wait以等待子级完成命令。
 * 2.要读取单个输入行，请一次读取一个字符，直到出现换行符（'\n'）。
 * 3.kernel/param.h声明MAXARG，如果您需要声明argv数组，这可能很有用。
 */
#include "kernel/types.h"
#include "user/user.h"
#include "kernel/stat.h"
#include "kernel/fs.h"

char *buf[16], *xargv[16];

char bef[16], befnoy[16];

int main(int argc, char *argv[]) {
    sleep(10);
    int i;
    //获取自己的参数
    for (i = 1; i < argc; i++) {
        buf[i - 1] = argv[i];
    }
    int zjcs = i - 1;
    char *p, *q, *p2;
    //获取前面的参数
    if (read(0, bef, sizeof bef) > 0) {
        p = bef;
        p2 = befnoy;
        q = bef + strlen(bef);
        if (*p == '"' && bef[strlen(bef) - 1] == '"') {
            p++;
            q--;
            while (p != q) {
                *p2++ = *p++;
            }
        } else {
            strcpy(befnoy, bef);
        }
    }
    //处理前面的参数
    p = befnoy;
    q = befnoy + strlen(befnoy);
    p2 = bef;
    memset(bef, 0, sizeof bef);
    while (p != q) {
        if (*p == '\n') {
            p = p + 1;
            //组合参数
            buf[zjcs] = bef;
            buf[zjcs+1]=0;
            if (fork() == 0) {
                exec(buf[0], buf);
            } else {
                wait(0);
            }
            memset(bef, 0, sizeof bef);
            p2 = bef;
        } else {
            *p2++ = *p++;
        }
    }
    //组合参数

    exit(0);
}